package form.validator;

import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;

import form.bean.StudentForm;

/**
 * Classe de validation du bean StudentForm
 * 
 * @author Yannick Lorenzati & Stephanie Malakian
 * 
 */
public class StudentFormValidator implements Validator {

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.springframework.validation.Validator#supports(java.lang.Class)
	 */
	@SuppressWarnings("unchecked")
	@Override
	public boolean supports(Class clazz) {
		return StudentForm.class.isAssignableFrom(clazz);

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see org.springframework.validation.Validator#validate(java.lang.Object,
	 * org.springframework.validation.Errors)
	 */
	@Override
	public void validate(Object obj, Errors e) {

		StudentForm f = (StudentForm) obj;

		ValidationUtils.rejectIfEmptyOrWhitespace(e, "login", null,
				"login vide");
		if (!e.hasFieldErrors("login")) {

			if (!FieldValidatorUtil.isGoodLength(f.getLogin(), 5, 15)) {
				e.rejectValue("login", null,
						"le login doit contenir entre 5 et 15 caractères");
			}

			if (!FieldValidatorUtil.isAlphaNumString(f.getLogin())) {
				e.rejectValue("login", null,
						"le login contient des caractères interdits");
			}

		}

		ValidationUtils.rejectIfEmptyOrWhitespace(e, "name", null, "nom vide");
		if (!e.hasFieldErrors("name")) {

			if (!FieldValidatorUtil.isGoodLength(f.getName(), 2, 40)) {
				e.rejectValue("name", null,
						"le nom doit contenir entre 5 et 15 caractères");
			}

			if (!FieldValidatorUtil.isAlphaStringWithAccentChar(f.getName())) {
				e.rejectValue("name", null,
						"le nom contient des caractères interdits");
			}

		}

		ValidationUtils.rejectIfEmptyOrWhitespace(e, "firstName", null,
				"prenom vide");
		if (!e.hasFieldErrors("firstName")) {

			if (!FieldValidatorUtil.isGoodLength(f.getName(), 2, 40)) {
				e.rejectValue("name", null,
						"le nom doit contenir entre 5 et 15 caractères");
			}

			if (!FieldValidatorUtil.isAlphaStringWithAccentChar(f.getName())) {
				e.rejectValue("firstName", null,
						"le prenom contient des caractères interdits");
			}

		}

		if (!f.getAddress().equals("")
				&& !FieldValidatorUtil.isValideAdress(f.getAddress())) {

			e.rejectValue("address", null,
					"l'adresse contient des caractères interdits");

		}

		if (!f.getMail().equals("") && !FieldValidatorUtil.isEmail(f.getMail())) {

			e.rejectValue("mail", null,
					"Ceci n'est pas une adresse email valide");

		}

		if (!f.getWeb().equals("") && !FieldValidatorUtil.isWebUrl(f.getWeb())) {

			e.rejectValue("web", null, "Ceci n'est pas une adresse web valide");

		}

		if (!f.getSociety().equals("")
				&& !FieldValidatorUtil.isAlphaStringWithAccentChar(f
						.getSociety())) {

			e.rejectValue("society", null,
					"Le nom de la societé contient des caractères interdits");

		}

		if (!f.getComments().equals("")
				&& !FieldValidatorUtil.isValidText(f.getComments())) {

			e.rejectValue("comments", null,
					"Les commentaires contiennent des caractères interdits");

		}
	}

}
